gdk_x11_get_xatom_by_name_for_display (display, "SM_CLIENT_ID"));
}
+void
+gdk_display_setup_window_visual (GdkDisplay *display,
+ gint depth,
+ Visual *visual,
+ Colormap colormap,
+ gboolean rgba)
+{
+ GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
+
+ display_x11->window_depth = depth;
+ display_x11->window_visual = visual;
+ display_x11->window_colormap = colormap;
+
+ gdk_display_set_rgba (display, rgba);
+}
+
GdkDisplay *
_gdk_x11_display_open (const gchar *display_name)
{
#endif
/* initialize the display's screens */
- display_x11->screen = _gdk_x11_screen_new (display, DefaultScreen (display_x11->xdisplay));
- if (gdk_screen_get_rgba_visual (display_x11->screen) == NULL)
- gdk_display_set_rgba (display, FALSE);
+ display_x11->screen = _gdk_x11_screen_new (display, DefaultScreen (display_x11->xdisplay), TRUE);
/* We need to initialize events after we have the screen
* structures in places
if (gdk_x11_display_error_trap_pop (display) || !result)
return NULL;
- screen = _gdk_x11_screen_new (display, XScreenNumberOfScreen (attrs.screen));
+ screen = _gdk_x11_screen_new (display, XScreenNumberOfScreen (attrs.screen), FALSE);
display_x11->screens = g_list_prepend (display_x11->screens, screen);
return NULL;
}
-static GdkVisual *
-gdk_x11_display_get_window_gdk_visual (GdkX11Display *display)
-{
- GdkScreen *screen;
- GdkVisual *visual;
-
- screen = gdk_display_get_default_screen (GDK_DISPLAY (display));
-
- visual = gdk_screen_get_rgba_visual (screen);
- if (visual == NULL)
- visual = gdk_screen_get_system_visual (screen);
-
- return visual;
-}
-
int
gdk_x11_display_get_window_depth (GdkX11Display *display)
{
- return gdk_visual_get_depth (gdk_x11_display_get_window_gdk_visual (display));
+ return display->window_depth;
}
Visual *
gdk_x11_display_get_window_visual (GdkX11Display *display)
{
- return gdk_x11_visual_get_xvisual (gdk_x11_display_get_window_gdk_visual (display));
+ return display->window_visual;
}
Colormap
gdk_x11_display_get_window_colormap (GdkX11Display *display)
{
- return _gdk_visual_get_x11_colormap (gdk_x11_display_get_window_gdk_visual (display));
+ return display->window_colormap;
}
static void
void _gdk_x11_error_handler_push (void);
void _gdk_x11_error_handler_pop (void);
-Colormap _gdk_visual_get_x11_colormap (GdkVisual *visual);
-
GdkVisual * _gdk_x11_screen_get_system_visual (GdkScreen *screen);
GList * _gdk_x11_screen_list_visuals (GdkScreen *screen);
+void gdk_display_setup_window_visual (GdkDisplay *display,
+ gint depth,
+ Visual *visual,
+ Colormap colormap,
+ gboolean rgba);
int gdk_x11_display_get_window_depth (GdkX11Display *display);
Visual * gdk_x11_display_get_window_visual (GdkX11Display *display);
Colormap gdk_x11_display_get_window_colormap (GdkX11Display *display);
gpointer data);
void _gdk_x11_screen_init_root_window (GdkScreen *screen);
-void _gdk_x11_screen_init_visuals (GdkScreen *screen);
+void _gdk_x11_screen_init_visuals (GdkScreen *screen,
+ gboolean setup_display);
void _gdk_x11_cursor_update_theme (GdkCursor *cursor);
void _gdk_x11_cursor_display_finalize (GdkDisplay *display);
GdkVisual visual;
Visual *xvisual;
- Colormap colormap;
};
struct _GdkX11VisualClass
static void
gdk_x11_visual_init (GdkX11Visual *x11_visual)
{
- x11_visual->colormap = None;
-}
-
-static void
-gdk_x11_visual_finalize (GObject *object)
-{
- GdkVisual *visual = (GdkVisual *)object;
- GdkX11Visual *x11_visual = (GdkX11Visual *)object;
-
- if (x11_visual->colormap != None)
- XFreeColormap (GDK_SCREEN_XDISPLAY (visual->screen), x11_visual->colormap);
-
- G_OBJECT_CLASS (gdk_x11_visual_parent_class)->finalize (object);
-}
-
-static void
-gdk_x11_visual_dispose (GObject *object)
-{
- GdkVisual *visual = (GdkVisual *)object;
- GdkX11Visual *x11_visual = (GdkX11Visual *)object;
-
- if (x11_visual->colormap != None)
- {
- XFreeColormap (GDK_SCREEN_XDISPLAY (visual->screen), x11_visual->colormap);
- x11_visual->colormap = None;
- }
-
- G_OBJECT_CLASS (gdk_x11_visual_parent_class)->dispose (object);
}
static void
gdk_x11_visual_class_init (GdkX11VisualClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
-
- object_class->finalize = gdk_x11_visual_finalize;
- object_class->dispose = gdk_x11_visual_dispose;
}
void
-_gdk_x11_screen_init_visuals (GdkScreen *screen)
+_gdk_x11_screen_init_visuals (GdkScreen *screen,
+ gboolean setup_display)
{
static const gint possible_depths[8] = { 32, 30, 24, 16, 15, 8, 4, 1 };
static const GdkVisualType possible_types[6] =
for (i = 0; i < nvisuals; i++)
{
if (default_xvisual->visualid == GDK_X11_VISUAL (visuals[i])->xvisual->visualid)
- {
- x11_screen->system_visual = visuals[i];
- GDK_X11_VISUAL (visuals[i])->colormap =
- DefaultColormap (x11_screen->xdisplay, x11_screen->screen_num);
- }
+ x11_screen->system_visual = visuals[i];
/* For now, we only support 8888 ARGB for the "rgba visual".
* Additional formats (like ABGR) could be added later if they
as we care about glx details such as alpha/depth/stencil depth,
stereo and double buffering */
_gdk_x11_screen_update_visuals_for_gl (screen);
+
+ if (setup_display)
+ {
+ if (x11_screen->rgba_visual)
+ {
+ Visual *xvisual = GDK_X11_VISUAL (x11_screen->rgba_visual)->xvisual;
+ Colormap colormap;
+
+ colormap = XCreateColormap (x11_screen->xdisplay,
+ RootWindow (x11_screen->xdisplay, x11_screen->screen_num),
+ xvisual,
+ AllocNone);
+ gdk_display_setup_window_visual (gdk_screen_get_display (screen),
+ x11_screen->rgba_visual->depth,
+ GDK_X11_VISUAL (x11_screen->rgba_visual)->xvisual,
+ colormap,
+ TRUE);
+ }
+ else
+ {
+ gdk_display_setup_window_visual (gdk_screen_get_display (screen),
+ DefaultDepth (x11_screen->xdisplay, x11_screen->screen_num),
+ DefaultVisual (x11_screen->xdisplay, x11_screen->screen_num),
+ DefaultColormap (x11_screen->xdisplay, x11_screen->screen_num),
+ FALSE);
+ }
+ }
}
GdkVisual *
return NULL;
}
-/**
- * _gdk_visual_get_x11_colormap:
- * @visual: the visual to get the colormap from
- *
- * Gets the colormap to use
- *
- * Returns: the X Colormap to use for new windows using @visual
- **/
-Colormap
-_gdk_visual_get_x11_colormap (GdkVisual *visual)
-{
- GdkX11Visual *x11_visual;
-
- g_return_val_if_fail (GDK_IS_VISUAL (visual), None);
-
- x11_visual = GDK_X11_VISUAL (visual);
-
- if (x11_visual->colormap == None)
- {
- x11_visual->colormap = XCreateColormap (GDK_SCREEN_XDISPLAY (visual->screen),
- GDK_SCREEN_XROOTWIN (visual->screen),
- x11_visual->xvisual,
- AllocNone);
- }
-
- return x11_visual->colormap;
-}
-
/**
* gdk_x11_visual_get_xvisual:
* @visual: (type GdkX11Visual): a #GdkVisual.